home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / manchester / 4.1 / menuInspector.st < prev    next >
Text File  |  1993-07-24  |  5KB  |  163 lines

  1. "    NAME        menuInspector
  2.     AUTHOR        Bernard Horan <bernard@is.morgan.com>
  3.     CONTRIBUTOR    Bernard Horan <bernard@is.morgan.com>
  4.     FUNCTION      use a walking menu to inspect an object
  5.     ST-VERSIONS    4.1
  6.     PREREQUISITES     TreeMenu
  7.     CONFLICTS     
  8.     DISTRIBUTION    world
  9.     VERSION        1.0
  10.     DATE        October 1992
  11.     SUMMARY        Hold down the shift key whilst selecting
  12. inspect and you will be provided with a walking menu inspecting the
  13. object. When you let go, you'll get an inspector on that object
  14. (unless you hold down shift and it will start all over again).
  15. Especially useful for VisualComponent structures. BH, 5/10/92"
  16.  
  17. 'From Objectworks\Smalltalk(R), Release 4.1 of 15 April 1992 on 1 October 1992 at 6:03:23 am'!
  18.  
  19.  
  20.  
  21. !CharacterArray methodsFor: 'private'!
  22.  
  23. basicInspectMenu
  24.     "return a tree menu with at least some labels and appropriate values. 
  25.     Optionally include a heading. 
  26.     Bernard Horan, 28 September 1992"
  27.  
  28.     | menu |
  29.     menu := super basicInspectMenu.
  30.     menu heading: self.
  31.     ^menu! !
  32.  
  33.  
  34. !String methodsFor: 'user interface'!
  35.  
  36. inspect
  37.     "Create and schedule a SequenceableCollectionInspector in which the user 
  38.     can examine the receiver's variables."
  39.     "If the shift key is down, then provide the user with a TreeMenu inspection 
  40.     of the object. 
  41.     Bernard Horan, 28 September 1992"
  42.  
  43.     InputState default shiftDown ifFalse: [SequenceableCollectionInspector openOn: self]
  44.         ifTrue: [self menuInspect]! !
  45.  
  46.  
  47. !OrderedCollection methodsFor: 'user interface'!
  48.  
  49. inspect
  50.     "Create and schedule a OrderedCollectionInspector in which the user 
  51.     can examine the receiver's variables."
  52.     "If the shift key is down, then provide the user with a TreeMenu inspection 
  53.     of the object. 
  54.     Bernard Horan, 28 September 1992"
  55.  
  56.     InputState default shiftDown ifFalse: [OrderedCollectionInspector openOn: self]
  57.         ifTrue: [self menuInspect]! !
  58.  
  59.  
  60. !Object methodsFor: 'user interface'!
  61.  
  62. inspect
  63.     "Create and schedule an Inspector in which the user can examine the 
  64.     receiver's variables."
  65.     "If the shift key is down, then provide the user with a TreeMenu inspection 
  66.     of the object. 
  67.     Bernard Horan, 28 September 1992"
  68.  
  69.     InputState default shiftDown ifFalse: [self basicInspect]
  70.         ifTrue: [self menuInspect]!
  71.  
  72. menuInspect
  73.     "provide a menu of my instance variables, with a suitable representation of 
  74.     me as its heading. 
  75.     Picking an instance variables will produce another menu, and so on.... 
  76.     Picking an item will cause 
  77.     a real inspector to be opened (unless of course, you've got the shift key 
  78.     held down). 
  79.     Bernard Horan, 1 October 1992"
  80.  
  81.     | target |
  82.     target := self inspectMenu startUp.
  83.     target == #noSelection ifFalse: [target inspect]! !
  84.  
  85. !Object methodsFor: 'private'!
  86.  
  87. basicInspectMenu
  88.     "return a tree menu with at least some labels and appropriate values. 
  89.     Optionally include a heading. 
  90.     Bernard Horan, 28 September 1992"
  91.  
  92.     | menu |
  93.     menu := self isManifest
  94.                 ifFalse: 
  95.                     [| names |
  96.                     names := self class allInstVarNames.
  97.                     TreeMenu labelArray: names values: ((1 to: names size)
  98.                             collect: [:i | self instVarAt: i])]
  99.                 ifTrue: [TreeMenu labels: self printString values: (Array with: self)].
  100.     menu heading: (self printString contractTo: 30).
  101.     ^menu!
  102.  
  103. inspectMenu
  104.     "provide a menu of my instance variables, with a suitable representation of 
  105.     me as its heading. 
  106.     Picking an instance variables will produce another menu, and so on.... 
  107.     Bernard Horan, 28 September 1992"
  108.  
  109.     | menu |
  110.     menu := self basicInspectMenu.
  111.     menu resultBlock: [:first :last | last == #noSelection
  112.             ifTrue: [first]
  113.             ifFalse: [last]].
  114.     menu children: (Array new: menu labels size withAll: [:t | t valueAtSelection inspectMenu]).
  115.     ^menu! !
  116.  
  117.  
  118. !Collection methodsFor: 'private'!
  119.  
  120. basicInspectMenu
  121.     "return a tree menu with at least some labels and appropriate values. 
  122.     Optionally include a heading. 
  123.     Bernard Horan, 28 September 1992"
  124.  
  125.     | menu names |
  126.     names := OrderedCollection new: self size.
  127.     self do: [:i | names add: i].
  128.     menu := TreeMenu labelArray: (names collect: [:i | i printString contractTo: 30])
  129.                 values: ((1 to: names size)
  130.                         collect: [:i | names at: i]).
  131.     menu heading: self class printString.
  132.     ^menu! !
  133.  
  134.  
  135. !Dictionary methodsFor: 'user interface'!
  136.  
  137. inspect
  138.     "Create and schedule a DictionaryInspector in which the user can examine 
  139.     the 
  140.     receiver's variables."
  141.     "If the shift key is down, then provide the user with a TreeMenu inspection 
  142.     of the object. 
  143.     Bernard Horan, 28 September 1992"
  144.  
  145.     InputState default shiftDown ifFalse: [Cursor wait showWhile: [DictionaryInspector openOn: self]]
  146.         ifTrue: [self menuInspect]! !
  147.  
  148. !Dictionary methodsFor: 'private'!
  149.  
  150. basicInspectMenu
  151.     "return a tree menu with at least some labels and appropriate values. 
  152.     Optionally include a heading. 
  153.     Bernard Horan, 28 September 1992"
  154.  
  155.     | menu names |
  156.     names := self keys asOrderedCollection.
  157.     menu := TreeMenu labelArray: (names collect: [:i | i printString contractTo: 30])
  158.                 values: (names collect: [:i | self at: i]).
  159.     menu heading: self class printString.
  160.     ^menu! !
  161.  
  162.  
  163.